﻿//JavaScript Document

//var strHref = "www.xxx.com/index.htm?a=aaa&b=bbb&c=ccc";
//alert(strHref.getQuery("a"));
//alert(strHref.getQuery("b"));
//alert(strHref.getQuery("c"));
String.prototype.getQuery = function(name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
	var r = this.substr(this.indexOf("?") + 1).match(reg);
	if (r != null)
		return unescape(r[2]);
	return null;
}

String.prototype.replaceAll = function(s1,s2) { 
    return this.replace(new RegExp(s1,"gm"),s2); 
}

// 应用实例：test_para.html?a=11&b=22&c=33
// alert(getUrlPara("a"));
// alert(getUrlPara("b"));
function getUrlPara(paraName) {
	var sUrl = location.href;
	var sReg = "(?:\\?|&){1}" + paraName + "=([^&]*)"
	var re = new RegExp(sReg, "gi");
	re.exec(sUrl);
	return RegExp.$1;
}

// alert(Request("a"));
// alert(Request("b"));
// alert(Request("c"));
function Request(strName) {
	var strHref = "www.xxx.com/index.htm?a=aaa&b=bbb&c=ccc";
	var intPos = strHref.indexOf("?");
	var strRight = strHref.substr(intPos + 1);
	var arrTmp = strRight.split("&");
	for ( var i = 0; i < arrTmp.length; i++) {
		var arrTemp = arrTmp[i].split("=");
		if (arrTemp[0].toUpperCase() == strName.toUpperCase())
			return arrTemp[1];
	}
	return "";
}

function progressbar_do(title) {
	if ($('#dialog_progressbar').length == 0) {
		$('body').append('<div id="dialog_progressbar"></div></div>');
		$('#dialog_progressbar')
				.dialog(
						{
							title : title + '操作进度',
							closable : false,
							text : 'sss',
							content : '<div id="progressbar" class="easyui-progressbar" style="width:400px;">',
							modal : true
						});
	}
	progressbar_set();
}
function progressbar_set() {
	var $progressbar = $('#progressbar');
	if ($progressbar.length > 0) {
		var value = $progressbar.progressbar('getValue');
		if (value < 100)
			value += Math.floor(Math.random() * 10);
		else
			value = 0;
		$progressbar.progressbar('setValue', value);
		setTimeout(arguments.callee, 200);
	}
}
function progressbar_remove() {
	$('#progressbar').remove();
	$('#dialog_progressbar').dialog('close');
	$('#dialog_progressbar').remove();
}

// *.去除空格 start //
String.prototype.Trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
};
String.prototype.lTrim = function() {
	return this.replace(/(^\s*)/g, "");
};
String.prototype.rTrim = function() {
	return this.replace(/(\s*$)/g, "");
};
// *.去除空格 end //

// *.全部替换掉匹配的字符。reallyDo：被搜索的子字符串。replaceWith：用于替换的子字符串。 //
String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) {
	if (!RegExp.prototype.isPrototypeOf(reallyDo)) {
		return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi" : "g")),
				replaceWith);
	} else {
		return this.replace(reallyDo, replaceWith);
	}
};
// *.全部替换掉匹配的字符end //

// *.js中的字符串正常显示在HTML页面中 //
String.prototype.displayHtml = function() {
	// 将字符串转换成数组
	var strArr = this.split('');
	// HTML页面特殊字符显示，空格本质不是，但多个空格时浏览器默认只显示一个，所以替换
	var htmlChar = "<>";// &
	for ( var i = 0; i < this.length; i++) {
		// 查找是否含有特殊的HTML字符
		if (htmlChar.indexOf(this.charAt(i)) != -1) {
			// 如果存在，则将它们转换成对应的HTML实体
			switch (this.charAt(i)) {
			case '<':
				strArr.splice(i, 1, '&#60;');
				break;
			case '>':
				strArr.splice(i, 1, '&#62;');
				break;
			/*
			 * case '&': strArr.splice(i,1,'&#38;'); break;
			 */
			}
		}
	}
	return strArr.join('');
}
// *.js中的字符串正常显示在HTML页面中 end //

// *.验证邮箱 start true:格式正确，false:格式错误 //
function isEmail(mail) {
	var filter = /^([a-za-z0-9_.-])+@(([a-za-z0-9-])+.)+([a-za-z0-9]{2,4})+$/;
	if (filter.test(mail))
		return true;
	else
		return false;
}
// *.验证邮箱 end //

//*.检查是否为网址 start true:格式正确，false:格式错误 //
function isUrl(str_url) {
	var strRegex = "^((https|http|ftp|rtsp|mms)?://)"  
        + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" // ftp的user@  
        + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184  
        + "|" // 允许IP和DOMAIN（域名）  
        + "([0-9a-z_!~*'()-]+\.)*" // 域名- www.  
        + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名  
        + "[a-z]{2,6})" // first level domain- .com or .museum  
        + "(:[0-9]{1,4})?" // 端口- :80  
        + "((/?)|" // a slash isn't required if there is no file name  
        + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";  
	var re = new RegExp(strRegex);  
	return re.test(str_url);
}
//*.检查是否为网址 end //

/**
 * 获得当前的日期
 * 
 * @return {}
 */
function getCurrentDate() {
	var userAgent = navigator.userAgent.toLowerCase();
	// 判断是否为google的浏览器
	var chrome = /chrome/.test(userAgent);
	var currentDate = new Date();
	// 因IE的年为2008和FF为108，判断
	var currentYear = currentDate.getYear();
	if ($.browser.mozilla || chrome) {
		currentYear += 1900;
	}
	var currentDateStr = currentYear + '-' + (currentDate.getMonth() + 1) + '-'
			+ currentDate.getDate();
	return currentDateStr;
}
// 判断是否有中文
function hasChina(str) {
	if (!/.*[\u4e00-\u9fa5]+.*$/.test(str)) {
		return false;
	}
	// if (escape(str).indexOf("%u") < 0) {
	// 原理呢就是escape对字符串进行编码，字符值大于 255 的以 %u**** 格式存储，而字符值大于 255
	// 的恰好是非英文字符（一般是中文字符，非中文字符也可以当作中文字符考虑）。
	// indexOf用以判断在字符串中是否存在某子字符串，找不到返回 -1。
	// return false;
	// }
	return true;
}

// 检查是否全是中文
function isChina(str) {
	var reg = /^[\u4E00-\u9FA5]+$/;
	if (!reg.test(str)) {
		return false;
	}
	return true;
}

/**
 * 转换容量单位换算方法zk
 */
function unitConver(limit) {
	limit = limit + ' B';
	var reCat = /[0-9]*[a-z]B/;
	if (!reCat.test(limit) && limit.indexOf(' B') != -1) { // 如果单位是b,转换为KB加单位递归
		limit = limit.substring(0, limit.indexOf(' B')); // 去除单位,转换为数字格式
		limit = Math.ceil((limit / 1024)) + ' KB'; // 换算舍入加单位
	}
	if (limit.indexOf(' KB') != -1 && limit.length > 6) { // 如果为KB,转换为MB加单位递归
		limit = limit.substring(0, limit.indexOf(' KB')); // 去除单位,转换为数字格式
		limit = Math.ceil((limit / 1024)) + ' MB'; // 换算舍入加单位
	}
	if (limit.indexOf(' MB') != -1 && limit.length > 6) { // 如果为MB,转换为GB加单位递归
		limit = limit.substring(0, limit.indexOf(' MB'));// 去除单位,转换为数字格式
		limit = Math.ceil((limit / 1024)) + " GB"; // 换算舍入加单位
	}
	if (limit.indexOf(' GB') != -1 && limit.length > 6) { // 如果为GB,转换为TB加单位递归
		limit = limit.substring(0, limit.indexOf(' GB'));// 去除单位,转换为数字格式
		limit = Math.ceil((limit / 1024)) + "TB"; // 换算舍入加单位
		return limit; // TB为最大单位转换后跳出
	}
	if (limit.indexOf(' TB') != -1 && limit.length > 6) { // 如果为GB,转换为TB加单位递归
		limit = limit.substring(0, limit.indexOf(' TB'));// 去除单位,转换为数字格式
		limit = Math.ceil((limit / 1024)) + " PB"; // 换算舍入加单位
		return limit; // TB为最大单位转换后跳出
	}
	return limit;
}

/**
 * 解析身份证号码
 * @param idCard
 * @returns {isvalidate: true, err: '', native: '', birthday: bd, gender: '男'}
 */
function parseIdcard(idCard) {
	var result = {};
	result.isvalidate = true;
	result.err = '';
	result.native = '';
	result.birthday = '';
	result.gender = '';
	
	var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子 
	var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值.10代表X
	
	if (idCard.length == 18) {
		if (!/^\d+$/.test(idCard.substring(0, 17))) {
			result.isvalidate = false;
			result.err = '身份证除最后一位外，必须为数字';
		} else if (!/^\d+$/.test(idCard.substring(17, 18)) && idCard.substring(17, 18) != 'X'&& idCard.substring(17, 18) != 'x') {
			result.isvalidate = false;
			result.err = '身份证最后一位为数字或者X';
		} else {
			var year = idCard.substring(6, 10);
			var month = idCard.substring(10, 12);
			var day = idCard.substring(12, 14);
			
			var curyear = new Date().getFullYear();			
			var temp_date = new Date(year, parseFloat(month) - 1,
					parseFloat(day));
			// 这里用getFullYear()获取年份，避免千年虫问题
			if (temp_date.getFullYear() != parseFloat(year)) {
				result.isvalidate = false;
				result.err = '身份证出生年份不正确';
			}else if (temp_date.getMonth() != parseFloat(month) - 1) {
				result.isvalidate = false;
				result.err = '身份证出生月份不正确';
			} else if (temp_date.getDate() != parseFloat(day)) {
				result.isvalidate = false;
				result.err = '身份证出生日不正确';
			} else {
				var a_idCard = idCard.split('');// 得到身份证数组
				var sum = 0; // 声明加权求和变量
				if (a_idCard[17].toLowerCase() == 'x') {
					a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作
				}
				for ( var i = 0; i < 17; i++) {
					sum += Wi[i] * a_idCard[i];// 加权求和
				}
				valCodePosition = sum % 11;// 得到验证码所位置
				if (a_idCard[17] != ValideCode[valCodePosition]) {
					result.isvalidate = false;
					result.err = '身份证验证位不正确';
				} else {
					result.isvalidate = true;
					result.native = idCard.substring(0, 6)
					//result.birthday = temp_date;
					result.birthday = year + '-' + month + '-' + day;
					result.gender = getGenderByIdcart(idCard);
				}
			}
		}
	} else {
		result.isvalidate = false;
		result.err = '身份证号码为18位';
	}
	return result;
}

function getGenderByIdcart(idCard) {
	if (idCard.substring(14, 17) % 2 == 0) {
		return '女';
	} else {
		return '男';
	}
}

//自定义小数位截取函数
function to_decimals(varNumber,pointLen){
	 varNumber=parseFloat(varNumber);
	 if (varNumber.toFixed)
	 {
		 // Browser supports toFixed() method
		 varNumber = varNumber.toFixed(pointLen)
	 }else{
		 // Browser doesn’t support toFixed() method so use some other code
		 var div = Math.pow(10,pointLen);
		 varNumber = Math.round(varNumber * div) / div;
	 }
	 return varNumber;
}

/**
 * 校验企业社会信用代码格式
 * 
 * @param Code
 * @returns
 */
function checkSocialCreditCode(Code) {
	  var patrn = /^[0-9A-Z]+$/;
	  // 18位校验及大写校验
	  if ((Code.length != 18) || (patrn.test(Code) == false)) {
	    console.info("不是有效的统一社会信用编码！");
	    return false;
	  } else {
	    var Ancode;// 统一社会信用代码的每一个值
	    var Ancodevalue;// 统一社会信用代码每一个值的权重
	    var total = 0;
	    var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];// 加权因子
	    var str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
	    // 不用I、O、S、V、Z
	    for (var i = 0; i < Code.length - 1; i++) {
	      Ancode = Code.substring(i, i + 1);
	      Ancodevalue = str.indexOf(Ancode);
	      total = total + Ancodevalue * weightedfactors[i];
	      // 权重与加权因子相乘之和
	    }
	    var logiccheckcode = 31 - total % 31;
	    if (logiccheckcode == 31) {
	      logiccheckcode = 0;
	    }
	    var Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
	    var Array_Str = Str.split(',');
	    logiccheckcode = Array_Str[logiccheckcode];
	 
	 
	    var checkcode = Code.substring(17, 18);
	    if (logiccheckcode != checkcode) {
	      console.info("不是有效的统一社会信用编码！");
	      return false;
	    } else {
	      console.info("yes");
	    }
	    return true;
	  }
}

/**
 * 校验身份证号合法性
 * 
 * @param code
 * @returns
 */
function checkIdentityCode(code) { 
    var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "};
    //var tip = "";
    var pass= true;

    if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
        //tip = "身份证号格式错误";
        pass = false;
    } else if(!city[code.substr(0,2)]){
        //tip = "地址编码错误";
        pass = false;
    } else{
        //18位身份证需要验证最后一位校验位
        if(code.length == 18){
            code = code.split('');
            //∑(ai×Wi)(mod 11)
            //加权因子
            var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
            //校验位
            var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
            var sum = 0;
            var ai = 0;
            var wi = 0;
            for (var i = 0; i < 17; i++)
            {
                ai = code[i];
                wi = factor[i];
                sum += ai * wi;
            }
            var last = parity[sum % 11];
            if(parity[sum % 11] != code[17]){
                //tip = "校验位错误";
                pass =false;
            }
        }
    }
    //if(!pass) alert(tip);
    return pass;
}

/**
 * 校验手机号格式
 * 
 * @param str
 * @returns
 */
function checkPhoneNum(str) {
    var myreg=/^[1][3,4,5,7,8][0-9]{9}$/;
    if (!myreg.test(str)) {
        return false;
    } else {
        return true;
    }
}
